Technical Q&A

FW 01 - ドアベルの使い方(1999 年 5 月 17 日)


Q: FireWire SBP2 (Serial Bus Protocol 2) デバイスのドアベルを適切に使用する方法を教えてください。

A: ドアベルは、待機中の SBP2 デバイスにシグナルを送り、現在の ORB (Object Request Block) ポインタを再検査させるために使用します。SBP2 デバイスが現在 ORB を実行中である場合は、ドアベルを鳴らしても何の効果もありません (FireWire バス上のトラフィックが若干増加するだけで)。

一部のドライバは、ステータスの通知を行わない ORB チェーンを作成することがあるため、そのようなドライバでは、SPB2 デバイスが ORB を処理しているかどうか、また、新しい ORB がチェーンに追加されたときに SPB2 デバイスがアイドル状態にあるかどうかを認識できないことがあります。このような理由から、常にドアベルを鳴らすのが望ましいといえます。SPB2 デバイスがその前に送信された ORB をまだ実行している場合、ドアベルはその処理に何の影響も与えません。また、追加されたばかりの新しい ORB は、あたかもその前に送信された ORB チェーンの一部であるかのように実行されます。SPB2 デバイスが前の ORB チェーンの処理を終了してしまっている場合は、ドアベルを鳴らすことで、新しく追加された ORB のフェッチが行われ、その実行が開始されます。

しかし、FWSBP2Append に対するイミーディエットフラグをセットしている場合は、ドアベルを鳴らしても無駄です (その後でさらに ORB を追加しないかぎり)。ドアベルを鳴らすことが意味を持つのは、イミーディエットフラグがセットされていない ORB を含む FWSBP2Append を呼び出した後だけです。

常にドアベルを鳴らすことは、ドアベルを鳴らすかどうかを判断することよりもはるかに単純なアルゴリズムであり、FireWire バスに 4 バイトの書き込みが行われることを除いて、特に何のペナルティもありません。このため、ドアベルを鳴らすべきかどうかに迷わないことをおすすめします。


-- Mark Cookson
Worldwide Developer Technical Support

Technical Q&As | Contents
Next Question

To contact us, please use the Contact Us page.